\documentclass[11pt]{scrartcl} 

\input{structure.tex} 

%---------------------------------------------------------------


\title{	
	\normalfont\normalsize
	\textsc{DS2022}\\ 

	\vspace{25pt} 
	\rule{\linewidth}{0.5pt}\\ 

	\vspace{20pt} 
	{\huge 五则计算器}\\ 

	\vspace{12pt} % Whitespace
	\rule{\linewidth}{2pt}\\ 
	\vspace{12pt} % Whitespace
}

\author{ 陈宇涛,3210102287,强数2101} 

\date{\normalsize\today} 

\begin{document}

\maketitle 



\section{项目要求}

\begin{itemize}
	\item 求解任意长度的含加、减、乘、除、乘方运算的表达式结果
	
	\item 允许浮点数计算和带括号计算
	
	\item 能够检测错误输入(包括但不限于表达式逻辑错误、除数为0)并给出错误信息
\end{itemize}

%------------------------------------------------
\section{设计思路}

\begin{itemize}
\item 在一行中输入计算表达式存放在string infix中;
\item 对infix进行初步识别:
	\begin{itemize}
		\item 是否有除了数字,小数点,运算符和括号之外其他符号
		\item 括号是否()左右匹配
		\item 数字格式是否正确（出现像23.4.3和2++3等输入错误）
		\item 表达式末不能出现运算符
	\end{itemize}
\item 将中缀表达式转为后缀表达式
	\begin{itemize}
		\item 创建一个栈stack和后缀表达式字符串postfix
		\item 遇到‘（’入栈,遇到‘）’将所有栈中左括号前的运算符出栈 
		\item 遇到运算符,比较栈顶的运算符和它的优先级,若栈中优先级高，则依次出栈，直到遇见左括号或者空栈为止，将该运算符入栈
		\item 获取完后，将栈中剩余的运算符号依次弹栈输出
	\end{itemize}
		\begin{itemize}
			\item 由于允许浮点数，所以后缀表达式数字和数字之间如果没有空格隔开将会出现混淆，所以每次在后缀表达式字符串中存放数字是要有空格隔开.
		\end{itemize}
\item 计算后缀表达式的结果
	\begin{itemize}
		\item 遇到数字或小数点，计算整个数字的值然后放入一个新栈中
		\item 当碰到运算符式,将栈顶的两个数字做运算(可能遇到的错误有:)
			\begin{itemize}
				\item 除数为0
				\item 无法做幂次计算
			\end{itemize}
	\end{itemize}
\item 计算器补充改进部分
	\begin{itemize}
		\item 可以输入例如"$(-3.4)^3$"等输入
	\end{itemize}
\end{itemize}


%----------------------------------------------------------------------------------------
\section{样例说明}

\lstinputlisting[
	caption=Example1 for Calculator5, 
	language=Perl, 
	frame=single, 
	showstringspaces=false, 
	numbers=left, 
	numberstyle=\tiny, 
	]{example1.pl}


\lstinputlisting[
	caption=Example2 for Calculator5, 
	language=Perl, 
	frame=single, 
	showstringspaces=false, 
	numbers=left, 
	numberstyle=\tiny, 
	]{example2.pl}
%----------------------------------------------------------------------------------------

\section{补充}
例如在表达式中首项有多个空格等情况,以后再加改进.

\end{document}
